{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Combining Gates and Activation Functions\n",
    "\n",
    "\n",
    "This function shows how to implement various gates with activation functions in TensorFlow.\n",
    "\n",
    "This function is an extension of the prior gates, but with various activation functions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tensorflow.python.framework import ops\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Start Graph Session\n",
    "sess = tf.Session()\n",
    "tf.set_random_seed(5)\n",
    "np.random.seed(42)\n",
    "\n",
    "batch_size = 50\n",
    "\n",
    "a1 = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b1 = tf.Variable(tf.random_uniform(shape=[1,1]))\n",
    "a2 = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b2 = tf.Variable(tf.random_uniform(shape=[1,1]))\n",
    "x = np.random.normal(2, 0.1, 500)\n",
    "x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "sigmoid_activation = tf.sigmoid(tf.add(tf.matmul(x_data, a1), b1))\n",
    "\n",
    "relu_activation = tf.nn.relu(tf.add(tf.matmul(x_data, a2), b2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare the loss function as the difference between\n",
    "# the output and a target value, 0.75.\n",
    "loss1 = tf.reduce_mean(tf.square(tf.subtract(sigmoid_activation, 0.75)))\n",
    "loss2 = tf.reduce_mean(tf.square(tf.subtract(relu_activation, 0.75)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step_sigmoid = my_opt.minimize(loss1)\n",
    "train_step_relu = my_opt.minimize(loss2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Optimizing Sigmoid AND Relu Output to 0.75\n",
      "sigmoid = 0.126552 relu = 2.02276\n",
      "sigmoid = 0.178638 relu = 0.75303\n",
      "sigmoid = 0.247698 relu = 0.74929\n",
      "sigmoid = 0.344675 relu = 0.749955\n",
      "sigmoid = 0.440066 relu = 0.754\n",
      "sigmoid = 0.52369 relu = 0.754772\n",
      "sigmoid = 0.583739 relu = 0.75087\n",
      "sigmoid = 0.627335 relu = 0.747023\n",
      "sigmoid = 0.65495 relu = 0.751805\n",
      "sigmoid = 0.674526 relu = 0.754707\n"
     ]
    }
   ],
   "source": [
    "# Run loop across gate\n",
    "print('\\nOptimizing Sigmoid AND Relu Output to 0.75')\n",
    "loss_vec_sigmoid = []\n",
    "loss_vec_relu = []\n",
    "for i in range(500):\n",
    "    rand_indices = np.random.choice(len(x), size=batch_size)\n",
    "    x_vals = np.transpose([x[rand_indices]])\n",
    "    sess.run(train_step_sigmoid, feed_dict={x_data: x_vals})\n",
    "    sess.run(train_step_relu, feed_dict={x_data: x_vals})\n",
    "    \n",
    "    loss_vec_sigmoid.append(sess.run(loss1, feed_dict={x_data: x_vals}))\n",
    "    loss_vec_relu.append(sess.run(loss2, feed_dict={x_data: x_vals}))    \n",
    "    \n",
    "    sigmoid_output = np.mean(sess.run(sigmoid_activation, feed_dict={x_data: x_vals}))\n",
    "    relu_output = np.mean(sess.run(relu_activation, feed_dict={x_data: x_vals}))\n",
    "    \n",
    "    if i%50==0:\n",
    "        print('sigmoid = ' + str(np.mean(sigmoid_output)) + ' relu = ' + str(np.mean(relu_output)))\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nP5RGswJIgsY+AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11011de10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the loss\n",
    "plt.plot(loss_vec_sigmoid, 'k-', label='Sigmoid Activation')\n",
    "plt.plot(loss_vec_relu, 'r--', label='Relu Activation')\n",
    "plt.ylim([0, 1.0])\n",
    "plt.title('Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf-cpu]",
   "language": "python",
   "name": "conda-env-tf-cpu-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
